/*
 * Dyna.h
 *
 *  Created on: 2010-05-27
 *      Author: mateusz
 */

#ifndef DYNA_H_
#define DYNA_H_

#include <ClanLib/core.h>
#include <ClanLib/display.h>

#include <map>

#include "Map.h"
#include "Player.h"
#include "Bombs.h"
#include "Client.h"

/**
 * Główna klasa obsługująca cała gre i wyświetlająca okno gry.
 */

class Dyna {
public:
	/**
	 * @param window okno gry
	 * @param resources plik z grafika
	 * @param client polaczenie z serwerem
	 */
	Dyna(CL_DisplayWindow *window, CL_ResourceManager *resources, Client *client);
	virtual ~Dyna();

	/**
	 * Pętla gry
	 */
	void exec();

	/**
	 * Pomocnicza funkcja rysująca scene
	 */
	void drawScene();

	/**
	 * Aktualizowanie położenia gracza i wybuchu bomb
	 */
	void updateState();

	/**
	 * Obsługa krzyzyka okna
	 */
	void slotQuit();
private:
	/**
	 * Obsługa podłączenia się nowego gracza
	 * @param index id gracza
	 */
	void slotPlayerConnected(int index);

	/**
	 * Obsługa rozłączanie się przeciwnika
	 * @param index id przeciwnika
	 */
	void slotPlayerDisconnected(int index);

	/**
	 * Obsługa zmiany położenia przez gracza. Wysyła event do serwera
	 * @param x nowe x
	 * @param y nowe y
	 */
	void slotPlayerMove(int x, int y);

	/**
	 * Obsługa podłożenia bomby przez gracza. Wysyła event do serwera
	 * @param x współrzędna x
	 * @param y współrzędna y
	 */
	void slotBombPlanted(int x, int y);

	/**
	 * Obsługa zmiany mapy. Wczytuje ja ze stringu
	 * @param str mapa w stringu
	 */
	void slotMap(CL_String str);

	/**
	 * Obsługa zmiany położenia przez przeciwnika
	 * @param index id gracza
	 * @param x wspolrzedna x w pikselach
	 * @param y współrzędna y w pikselach
	 */
	void slotRemotePlayerMove(int index, int x, int y);

	/**
	 * Obsługa podłożenia bomby przez przeciwnika
	 * @param index id gracza
	 * @param x wspolrzedna x w pikselach
	 * @param y współrzędna y w pikselach
	 */
	void slotRemotePlayerBombPlant(int index, int x, int y);

	/**
	 * Śmierc gracza. Wysyła event do serwera
	 */
	void slotDead(int dead);

	/**
	 * Obsługa smierci przeciwnika
	 * @param index id gracza
	 */
	void slotRemoteDead(int index);

	/**
	 * Obsługa rozpoczęcia gry. Usuwa bomby, ustawia graczy na pozycje i
	 * wszystkich ożywia.
	 */
	void slotStartGame();

	/**
	 * Obsługa nadania id przez serwer. Wybiera odpowiednia grafike gracza.
	 */
	void slotId();

	CL_DisplayWindow *displayWindow;
	CL_ResourceManager *resources;
	Client *client;

	std::map<int,Player*> remotePlayers;

	Map *map;
	Player *player;
	Bombs* bombs;

	CL_SlotContainer slots;

	bool quit;
};

#endif /* DYNA_H_ */
